using System;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace CollabApp.Domain.Services.Rankings;
    public interface IRankingService
    {
        // 获取总排行榜（实时，Redis）
        Task<List<dynamic>> GetOverallRankingAsync(int page, int limit);
        // 写入/更新总榜积分（实时，Redis），返回当前总分与名次（1-based）
        Task<(int Score, long Rank)> SubmitScoreAsync(Guid userId, string username, string? avatarUrl, int deltaScore);
        // 手动/定时同步总榜到PGSQL
        Task SyncOverallRankingToPgsqlAsync(int topN = 1000);
        // 获取周排行榜（实时，Redis）
        Task<List<dynamic>> GetWeeklyRankingAsync(int page, int limit);
        // 获取月排行榜（实时，Redis）
        Task<List<dynamic>> GetMonthlyRankingAsync(int page, int limit);
        // 获取好友排行榜（实时，Redis）
        Task<List<dynamic>> GetFriendsRankingAsync(List<Guid> friendIds, int page, int limit);
        // 获取用户排名信息（PG）
        Task<dynamic?> GetUserRankingAsync(Guid userId);
        // 获取排行榜统计（PG）
        Task<dynamic?> GetRankingStatsAsync();
        // 按游戏类型获取排行榜（PG/Redis，按 period）
        Task<List<dynamic>> GetRankingByGameTypeAsync(string gameType, string period, int page, int limit);
        // 获取段位排行榜（PG）
        Task<List<dynamic>> GetTierRankingAsync(string tier, int page, int limit);
    }